/*题目描述:
 *小明所在的公司内部有多个部门，每个部门下可能有不同的子部门或者员工。
  请你设计一个组合模式来管理这些部门和员工，实现对公司组织结构的统一操作。
  部门和员工都具有一个通用的接口，可以获取他们的名称以及展示公司组织结构。
 *输入描述:
 * 第一行是一个整数 N（1 <= N <= 100），表示后面有 N 行输入。
  接下来的 N 行，每行描述一个部门或员工的信息。
  部门的信息格式为 D 部门名称，员工的信息格式为 E 员工名称，其中 D 或 E 表示部门或员工。
 *输出描述:
 * 输出公司的组织结构，展示每个部门下的子部门和员工
 *示例:
 *    输入：
            MyCompany
            8
            D HR
            E HRManager
            D Finance
            E AccountantA
            E AccountantB
            D IT
            E DeveloperA
            E DeveloperB
 *    输出：
            Company Structure:
            MyCompany
            HR
            HRManager
            Finance
            AccountantA
            AccountantB
            IT
            DeveloperA
            DeveloperB
 */

#include <iostream>

#include <vector>
#include <sstream>
using namespace std;
class Component{
public:
    virtual void display(int depth)=0;
};

class Department:public Component{
private:
    string name;
    vector<Component*> children;

public:
    Department(string &name):name(name){}
    void add(Component* component){
        children.push_back(component);
    }
    void display(int depth) override{
        string indent(depth*2,' ');
        cout<<indent<<name<<endl;
        for (auto component:children) {
            component->display(depth+1);
        }
    }
};

class Employee:public Component{
private:
    string name;
public:
    Employee(string& name):name(name){}
    void display(int depth) override{
        string indent((depth+1)*2,' ');
        cout<<indent<<name<<endl;
    }
};
class Company{
private:
    string name;
    Department* root;
public:
    Company(string& name):name(name),root(new Department(name)){}
    void add(Component* component){
        root->add(component);
    }
    void display(){
        cout<<"company structure"<<endl;
        root->display(0);
    }
};

int main(){
    string companyName;
    getline(cin,companyName);
    Company company(companyName);
    int n;
    cin>>n;
    cin.ignore();
    for (int i = 0; i < n; ++i) {
        string type,name;
        cin>>type;
        getline(cin>>ws,name);
        if (type=="D"){
            Department* department=new Department(name);
            company.add(department);
        }else if (type=="E"){
            Employee * employee=new Employee(name);
            company.add(employee);
        }
    }
    company.display();

    return 0;
}